// 当XMLHttpRequest对象把一个HTTP请求发送到服务器时将经历若干种状态：一直等待直到请求被处理；然后，它才接收一个响应。
function ajax(  
    url,  
    method = 'GET',  
    dataType = 'JSON',  
    async = true  //异步
) {  
    return new Promise((resolve, reject) => {  
      //浏览器的兼容性 IE 低版本不支持XMLHttpRequest
      const xhr = XMLHttpRequest
      ? new XMLHttpRequest()
      : new ActiveXObject('Microsoft.XMLHttp');
        xhr.open(method, url, async);

        // 根据dataType设置responseType  
        if (dataType === 'JSON') {  
            xhr.responseType = 'json'; // 注意这里是小写的'json'  
        }  
        xhr.onreadystatechange = () => {  //服务器响应完成就回调 响应意思就是服务器给了数据或者是错误
            if(xhr.readyState !== 4) return;//未完成 确保readyState为4（请求完成） 
            // 展示一下能力 304 Not Modified(未修改)
            if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){// 请求成功 或者 未修改
              resolve(xhr.responseText);// 成功
            }else{
              reject(new Error(xhr.responseText));// 失败
            }
   
        };  
  
        xhr.send();  // 发送请求  
    });  
}

